// src/types/permission.ts

export interface PermissionNode {
    /**
     * 主键id
     */
    id: number;

    /**
     * 父id
     */
    parentId: number | null;

    /**
     * 父名称
     */
    parentName: string | null;

    /**
     * 菜单标题
     */
    name: string;

    /**
     * 菜单权限编码(前端用)
     */
    code: string;

    /**
     * 1-菜单; 2-按钮权限
     */
    type: number;

    /**
     * 类型描述，如 "菜单" / "按钮权限"
     */
    typeDesc: string;

    /**
     * 是否隐藏路由: 0-否, 1-是
     */
    hidden: number;

    /**
     * 前端路由路径 (菜单项)
     */
    path: string | null;

    /**
     * 前端组件路径 (菜单项)
     */
    component: string | null;

    /**
     * 组件名字
     */
    componentName: string | null;

    /**
     * 菜单图标
     */
    icon: string | null;

    /**
     * 一级菜单跳转地址
     */
    redirect: string | null;

    /**
     * 菜单排序
     */
    sortNo: number | null;

    /**
     * 描述
     */
    description: string | null;

    /**
     * 是否被绑定（当前角色是否拥有该权限）
     */
    bindFlag?: boolean;

    /**
     * 创建时间
     */
    createTime: string; // ISO 8601 或 'yyyy-MM-dd HH:mm:ss' 字符串

    /**
     * 更新时间
     */
    updateTime: string; // 同上

    /**
     * 子权限节点
     */
    children?: PermissionNode[];
}

// types/permission.ts
export interface SysPermissionTree {
    id: number;
    parentId: number | null;
    parentName: string | null;
    name: string;
    code: string;
    type: number; // 1-菜单;2-按钮权限
    typeDesc: string;
    hidden: number; // 0-否, 1-是
    path: string;
    component: string | null;
    componentName: string | null;
    icon: string | null;
    redirect: string | null;
    sortNo: number;
    description: string | null;
    bindFlag: boolean | null;
    createTime: string | null; // 格式化后的日期字符串
    updateTime: string | null; // 格式化后的日期字符串
    children: SysPermissionTree[] | null;
}

export interface UserPermissionVo {
    menuPermissions: string[];
    buttonPermissions: string[];
}

export interface RolePermissionVo {
    menus: SysPermissionTree[];
    userPermission: UserPermissionVo;
}